/*
 * EstadoJogador.java
 *
 * Criado em 20 de Agosto de 2007, 18:20
 */

package codebreaker.protocolo;

import codebreaker.commom.Jogador;
import java.nio.ByteBuffer;

/**
 * Classe que define um pacote de rede do protocolo Code Breaker.
 * O pacote ESTADO_JOGADOR é enviado do servidor para os clientes
 * indicando a mudança de estado de algum cliente.
 *
 * @author Rodrigo
 */
public class EstadoJogador extends Pacote{
    
    public static final int ID = 8;
    public static final int TAMANHO = 2;
    
    public static final byte NORMAL = 0;
    public static final byte JOGANDO = 1;
    public static final byte DESCONECTADO = 2;
    
    private static final String estados[] = {"normal", "jogando", "desconectado"};
    
    private byte idJogador;
    private byte estado;
    
    /**
     * Cria uma nova instância de EstadoJogador
     */
    public EstadoJogador() {
	super();
    }
    
    /**
     * Cria um pacote a partir de um conjunto de bytes
     * @param bytes Conjunto de bytes
     * @param withID Sinaliza se os bytes tem o id do pacote
     */
    public EstadoJogador(byte bytes[], boolean withID) {
	super(bytes, withID);
    }
    
    /**
     * Cria uma nova instância de EstadoJogador
     * @param jogador Jogador
     */
    public EstadoJogador(Jogador jogador) {
	this(jogador.getId(), jogador.getEstado());
    }    
    
    /**
     * Cria uma nova instância de EstadoJogador
     * @param idJogador ID do jogador
     * @param estado Estado do jogador
     */
    public EstadoJogador(byte idJogador, byte estado) {
	super();
	this.idJogador = idJogador;
	this.estado = estado;
    }
    
    protected void fromBytes(ByteBuffer buffer) {
	idJogador = buffer.get();
	estado = buffer.get();
    }
    
    public byte getID() {
	return ID;
    }
    
    public int getTamanho() {
	return TAMANHO;
    }
    
    protected void writeBytes(ByteBuffer buffer) {
	buffer.put(idJogador);
	buffer.put(estado);
    }
    
    public byte getIdJogador() {
	return idJogador;
    }
    
    public void setIdJogador(byte idJogador) {
	this.idJogador = idJogador;
    }
    
    public byte getEstado() {
	return estado;
    }
    
    public void setEstado(byte estado) {
	this.estado = estado;
    }
    
    /**
     * Retorna uma representacao do pacote
     * em texto(string)
     * @return Texto representando o pacote
     */
    public String toString() {
	return estados[estado];
    }
}
